Github多人协作work flow

Posted by 石坤 on 2019-02-14

如果进行团队协作, 少不了使用Github对代码进行版本控制以及整合.
那么在使用GitHub的过程中, 如果遇到了合并冲突,应该如何解决呢?
如何让本地的代码与远程的最新代码同步呢?
会遇到很多问题, 下面以四个场景, 从简单到复杂, 层层递进, 来分析Github多人协作的工作流程

场景一:

  1. A创建Repo, B为合作者
  2. B把项目clone回去
  3. A修改代码, 然后推送代码 commit&git push
  4. B拉代码下来 git pull
  5. B修改代码, 然后推代码上去 commit&git push
  6. A 拉代码下来git pull

情景二:

  1. A修改代码, 然后推代码上去 commit&git push
  2. B修改代码, 然后推代码上去 commit&git push
    报错: 碰到![rejected]master -> master(fetch first)失败信息
  3. B要先拉代码下来git pull进行代码自动合并
  4. B再次git push
  5. A拉代码下来git pull

情景三:

  1. A修改代码, 然后推代码上去 commit&git push
  2. B修改代码, 然后推代码上去 commit&git push
    报错: 碰到![rejected]master -> master(fetch first)失败信息
  3. B要先拉代码下来git pull进行代码尝试自动合并(git pull时会报错:
    Automatic merge failed; fix conflicts and then commit the result, 此时远端的代码已经来下来了,只是自动合并失败,所以只需要手动合并即可)
    报错: 自动合并失败(Automatic merge failed), 因为两个人修改的是同一份文件,需要解决手动冲突, 然后git commit

    手动解决冲突: git status, 查看both modified,找到冲突的文件,打开并一一处理. 并去掉git添加的特殊标记符

  4. B再次git push

  5. A拉代码下来git pull

进阶用法(branch):

  1. 做新功能都先从master分支出来,创建一个新分支 feature branch

    • 初创分支 git checkout -b branchname
    • 第一次推 git push -u origin branchname
  2. 第一次拉远端分支 git checkout –track origin/branchname

  3. git checkout master
  4. git merge branchname
  5. git push

注意: git push与git pull时要注意操作命令是所在的分支

情景四:

  1. B开一个分支branch
  2. B修改代码, 然后推代码上去 commit & git push(第一次push: git push -u origin branchname; 如果不是第一次push,只需执行git push即可)
  3. B在github上Pull Request
  4. A收到通知进行查看代码,如果没问题,则合并进master(有时候,可能在github上无法直接merge,所以需要从远端拉到本地,解决冲突直接再merge)(如果是第一次拉远端分支:首先git pull先把代码拉到本地; 然后检出分支git checkout –track origin/branchname)
  5. B回到master进行git pull